/*
    在操作数据库时，有些操作我要一致写重复的代码，这个其实不人性的，作为程序员，一定要学会‘偷懒’，也就是要封装
        能省事的时候就要省事，  所以需要邓庄一下数据库的操作方法
    
    网上有很多大神封装好的，很好用的方法，为什么自己还要封装呢？ 小朋友，你是否有很多问号
        怎么说呢，毕竟时别人的不是自己的，其次每个项目的需求时不一样的，别人可能封装的很好，但是因为补丁我们实际开发者
        的需求，会封装很多其他用不到的方法，这个会使得整个程序运行起来比较慢 

        所以，我们自己封装有很多好处，  学习知识、代码量少、运行效率更优

    自动ES6出了class关键字之后，  封装基本都是使用class类来进行封装了 很少使用ES5的function构造函数来进行封装了
        原来时class时一种语法糖的写法，在继承等等操作上会容易理解很多
*/

class DB {
  constructor() {
    console.log("连接数据库");
  }
}

/*
    当我们创建两个实例时，如果连接的数据库是同一个数据库，那么这样会极大的降低性能，因为每次创建变量都需要花上几秒
        来连接一次数据库，  性能不佳  
    
    所以需要单例模式，  只有第一次初始化的时候会连接，再次初始化的时候使用的还是这个
*/

let db1 = new DB();

let db2 = new DB();

/*
    通过静态方法的来实现单例模式
        静态方法是直接使用类名.方法名  属于的是这个类的方法  而不是实例的方法
*/

class newDB {
  static getConnect() {
    if (!newDB.connect) {
      newDB.connect = new newDB();
    } else {
      return newDB.connect;
    }
  }
  constructor() {
    console.log("新方法连接至数据库");
  }
}
// 这样无论创建几个变量，他们共享的都是一个实例，极大的提升了性能
let new1 = newDB.getConnect();

let new2 = newDB.getConnect();
